package org.jeecg.modules.geo.service.resolve;

import org.jeecg.modules.geo.entity.BimGeoEvent;
import org.jeecg.modules.icon.entity.BimGeoIcon;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @ClassName
 * @Description TODO
 * @Author czd
 * @Date 2021/12/28 20:03
 * @Version 1.0
 **/
public class GeoBaseService {

    /**
     * geo默认事件获取
     * @param geoEventConfigResults
     * @param type
     * @return
     */
    public static Map<Integer, Map<Integer, List<BimGeoEvent>>> getGeoDefaultEvent(List<BimGeoEvent> geoEventConfigResults, Integer type) {
        if (geoEventConfigResults != null) {
            Map<Integer, Map<Integer, Map<Integer, List<BimGeoEvent>>>> geoEventConfigGroup = getGeoEventGroupByTypes(geoEventConfigResults);
            if (geoEventConfigGroup != null) {
                return geoEventConfigGroup.get(type);
            }
        }
        return null;
    }

    /**
     * geo事件按名称分组
     * @param geoEventConfigResults
     * @param type
     * @return
     */
    public static Map<String, List<BimGeoEvent>> getGeoEventGroupbyName(List<BimGeoEvent> geoEventConfigResults, Integer type) {
        if (geoEventConfigResults != null) {
            Map<Integer, Map<String, List<BimGeoEvent>>> geoEventGroupByName = getGeoEventGroupByName(geoEventConfigResults);
            if (geoEventGroupByName != null) {
                return geoEventGroupByName.get(type);
            }
        }
        return null;
    }

    /**
     * geo默认按钮列表
     * @param geoIconConfigResults
     * @param type
     * @return
     */
    public static Map<Integer, List<BimGeoIcon>> getGeoDefaultIcons(List<BimGeoIcon> geoIconConfigResults, Integer type) {
        if (geoIconConfigResults != null) {
            Map<Integer, Map<Integer, List<BimGeoIcon>>> geoDefaultIconGroupByTypes = getGeoDefaultIconGroupByTypes(geoIconConfigResults);
            if (geoDefaultIconGroupByTypes != null) {
                return geoDefaultIconGroupByTypes.get(type);
            }
        }
        return null;
    }

    /**
     * geo按钮按名称分组
     * @param geoIconConfigResults
     * @param type
     * @return
     */
    public static Map<String, List<BimGeoIcon>> getGeoIconGroupByName(List<BimGeoIcon> geoIconConfigResults, Integer type) {
        if (geoIconConfigResults != null) {
            Map<Integer, Map<String, List<BimGeoIcon>>> geoIconGroupByName = getGeoIconGroupByName(geoIconConfigResults);
            if (geoIconGroupByName != null) {
                return geoIconGroupByName.get(type);
            }
        }
        return null;
    }

    private static Map<Integer, Map<String, List<BimGeoIcon>>> getGeoIconGroupByName(List<BimGeoIcon> geoIconConfigResults) {
        return new HashMap<>();
        //return geoIconConfigResults.stream().collect(Collectors.groupingBy(BimGeoIcon::getType, Collectors.groupingBy(BimGeoIcon::getName)));

    }

    private static Map<Integer, Map<Integer, List<BimGeoIcon>>> getGeoDefaultIconGroupByTypes(List<BimGeoIcon> geoIconConfigResults) {
        return new HashMap<>();
        // return geoIconConfigResults.stream().collect(Collectors.groupingBy(BimGeoIcon::getType, Collectors.groupingBy(BimGeoIcon::getDefaultFlag)));
    }

    private static Map<Integer, Map<Integer, Map<Integer, List<BimGeoEvent>>>> getGeoEventGroupByTypes(List<BimGeoEvent> geoEventConfigResults) {
        return geoEventConfigResults.stream().collect(Collectors.groupingBy(BimGeoEvent::getType,
                Collectors.groupingBy(BimGeoEvent::getDefaultFlag, Collectors.groupingBy(BimGeoEvent::getMouseEventType))));
    }

    private static Map<Integer, Map<String, List<BimGeoEvent>>> getGeoEventGroupByName(List<BimGeoEvent> geoEventConfigResults) {
        return geoEventConfigResults.stream().collect(Collectors.groupingBy(BimGeoEvent::getType,
                Collectors.groupingBy(BimGeoEvent::getEventName)));
    }
}
